XSS Injection
CROSS SITE SCRIPTING (XSS) en sık karşılaşılan enjeksiyonlardan biridir ve saldırıya maruz kalanların browserında çalışır. Aslında html injection yaptığımız birçok yere xss injectionda yapabiliriz. Çalıştıkları yer aynı arayüzdür. Bu açık sayesinde saldırgan JavaScript kodlarını hedef web sitesindeki kullanıcıların cookie’lerini çalma, sosyal mühendislik saldırıları, saldırılan bilgisayarın webcamini inceleme, küçük phishing ile hedefin bilgisayarına trojan yükleme gibi etkileri büyük ölçüde vardır. Yani saldırgan adminin ulaşabileceği sayfalarda da bu açığı kullanabilirse çeşitli saldırıları da kullanarak yetki yükseltme ihtimali vardır. Ayrıca beef aracı xss saldırıları için çok fazla kullanılabilmektedir.
Bu açıkta dikkat etmemiz gereken nokta, geliştiricinin tagleri nasıl kullandığıdır. Bu yüzden direkt payloadları denememiz yanlış olur, sayfa kaynağından veya ögeleri denetle bölümünden incelememiz gerekir.
Bu makalede her başlıkta ayrı örnek göstereceğiz.
Bu Açığın 3 çeşidi vardır:
Reflected XSS Nedir?
Reflected XSS sosyal mühendislik ile de alakalıdır. Çünkü saldırgan javascript kodlu bir url hazırlar ve bu url’e tıklayanlar bu saldırıya maruz kalır. Yani saldırı kodları depolanmaz ve sadece url’e tıklayanların tarayıcısında çalışır. Örnek vermek gerekirse bir sayfada xss açığı nedir şeklinde sorgulama yaparız ve karşımıza şu şekilde “https://alperencoskun.com/?s=xssaciginedir” url gözükür. Ve bunu başkasına yolladığında aynı sayfada arama yapmış gibi olur. PortSwigger’den bir örnek verelim:
Yukarıdaki gibi ilk başta normal saldırganlık içermeyen bir arama yaptık. Ve sayfa kaynağına git dedik.
Şimdi saldırı yapmak için arama kelimemizden sonra tag’ı nasıl kapatmış ona bakacağız. (Arka planda çeşitli encoding yöntemleri uygulanabilir ama genelde bu bizi açığı bulmamıza yeterli olabilir) Deneme kelimesinden sonra ‘</h1> şeklinde tag’ı kapatmış bizde aramamızı tag’ı kapatıp arkasına kendi basic kodumuzu ekleyeceğiz.
Bu kodu yazıyoruz ve Search butonuna tıklıyoruz.
Ve Reflected XSS labını çözmüş olduk. Bu şekilde birçok web sitesinde açık bulmak mümkün.
Stored XSS Nedir?
Stored XSS, Reflected XSS’e göre çok daha etkisi büyüktür. Bunun sebebi Stored XSS’in depolanma durumu olduğundandır. Yani bir alışveriş web sitesinin ürün yorumları bölümünü düşünün ürüne bakan herkes o sayfada ürün yorumlarını da görür. Saldırganın revaşta olan bir ürünün yorum bölümüne kendi javascript kodunu eklediğini düşündüğümüzde etkisi çok daha büyük olur.
Stored XSS’ten de, PortSwigger’dan bir örnek verelim:
Karşımıza çıkan herhangi bir View post butonuna tıklıyoruz ve en alt bölümde yorum yapabileceğimiz bir alan var. Yorum kısmına ilk başta temiz bir şekilde tagları görmek için deneme yazıyoruz.
Şekilde gördüğümüz gibi yorumumuz </p> tagı ile kapatılmış.
Tag’ımı yukarıdaki şekildeki gibi kapatıp ve yorumu yolluyorum.
Ve amacımıza ulaştık artık bu yorumu gören herkes yazdığımız javascript kodlarımız ile karşılaşacak.
Dom XSS Nedir?
DOM (Document Object Model), Belge Nesnesi Modeli anlamına gelen şey aslında browserda resim, yazı gibi nesnelerin yorumlanmasını sağlar. Dom XSS’in aslında reflected ve stored çeşidi de vardır. Eğer sunucudan gelen filtrelemeler işe yaramazsa nesnelere müdahil olabileceğiz. Bizim bu test aşamamız basic şekilde document.write dosyasına erişmemiz olacak.
Örnek Uygulama için PortSwigger labını çözeceğiz.
Aynı şekilde deneme3 yazıyorum ve inspect element den alttaki gibi Dom XSS arayabileceğimi anlıyorum.
Burada resim tag’ine eklenmiş bir arama görüyoruz işte burada arama yapabiliriz.
Yapacağımız bu aramada DOM XSS ile domain bilgilerini çekmek istiyoruz.
Ve gördüğümüz üzere DOM XSS açığı ile domain bilgilerini çekmeyi başardık
Peki Gerçek Web Sitelerinde Laboratuvarlardaki Gibi Çıkar Mı?
Evet mümkün genellikle anlattığım reflected ve stored xss yapıları daha basittir, fakat dom xss’in örneklerini farklı şekillerde de görebiliriz. Veya injection yapmadan önce filtrelemelere takılmamak için kodlarımızı encode etmemiz gerekebilir ya da daha basit, saldırganlık seviyesi düşük hatta yok diyebileceğimiz kodlar denenebilir. Kısaca söylemek gerekirse yaptığımız örneklerdeki gibi birebir bu şekilde açık bulmak mümkün.
Birkaç XSS Örnek Raporları
https://hackerone.com/reports/1040639
https://hackerone.com/reports/846338
https://hackerone.com/reports/733248